package tp.disenio.controllers;

import java.util.ArrayList;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import tp.disenio.shared.Competencia;
import tp.disenio.shared.Participante;
import ClasesDAO.CompetenciaDAO;
import ClasesDAO.DAO_General;
import ClasesDAO.ParticipanteDAO;
import ClasesDAO.UsuarioDAO;
import tp.disenio.client.CompetenciaDTO;
import tp.disenio.client.ParticipanteDTO;
import tp.disenio.factory.JpaUtil;


/**
 * @author 
 * @version 1.0
 * @created 
 */
public class ControlParticipante {
	
	
	
	// CU09
	/**
	 * 
	 * @param competenciaDTO
	 * @param nombre
	 * @param mail
	 */
	public static boolean crearParticipante(CompetenciaDTO competenciaDTO, String nombre, String mail)throws IllegalArgumentException{
		
		int id_usuario = UsuarioDAO.getIdUsuarioPorMail(competenciaDTO.getUsuario());
		Competencia competencia = CompetenciaDAO.getCompetenciaPorNombre(id_usuario, competenciaDTO.getNombre());
		
		int idCompetencia = competencia.getIdCompetencia();
		
		if (ParticipanteDAO.existeParticipante(idCompetencia, nombre)){			
			throw new IllegalArgumentException("El nombre indicado para el participante ya fue registrado");			
		}
		
		if(ParticipanteDAO.existeParticipanteMail(idCompetencia,mail)){
			
			throw new IllegalArgumentException("El E-mail indicado para el participante ya fue registrado");
		}
		
		else {			
								
				Participante participante = new Participante();
				participante.setCompetencia(competencia);
				participante.setNombre(nombre);
				participante.setCorreoElectronico(mail);
				participante.setIdCompetencia(idCompetencia);
				competencia.agregarParticipante(participante);
				
				ParticipanteDAO.guardarParticipante(participante);		
		}		
		
		return true;
		
	}
	
	
	
	public static boolean eliminarParticipante(String nombre){
		
		EntityManager em = JpaUtil.getEntityManagerFactory().createEntityManager();
		em.getTransaction().begin();
		Query query = em.createQuery("DELETE FROM Participante P WHERE P.nombre = " + "\""+nombre+"\"");
		query.executeUpdate();
		em.getTransaction().commit();
		
		return true;
		
	}
	
	/**
	 * 
	 * @param competenciaDTO
	 * @return
	 */
	public static ArrayList<ParticipanteDTO> getParticipantes(CompetenciaDTO competenciaDTO){
		
		int id_usuario = UsuarioDAO.getIdUsuarioPorMail(competenciaDTO.getUsuario());
		Competencia competencia = CompetenciaDAO.getCompetenciaPorNombre(id_usuario, competenciaDTO.getNombre());
		int id_competencia = competencia.getIdCompetencia();		
		ArrayList<Participante> participantes = DAO_General.getParticipantes(id_competencia);		
		ArrayList<ParticipanteDTO> participantesDTO = new ArrayList<>();
		
		for (int i = 0; i < participantes.size(); i++){
			
			Participante participante = participantes.get(i);
			ParticipanteDTO participanteDTO = new ParticipanteDTO();			
			participanteDTO.setNombre(participante.getNombre());
			participanteDTO.setEmail(participante.getCorreoElectronico());
			
			participantesDTO.add(participanteDTO);			
		}
		
		
		return participantesDTO;
	}
	
}
